package kr.co.dayve.site.management.controller;


import kr.co.dayve.site.domain.*;
import kr.co.dayve.site.management.service.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.*;


/**
 * 게시판 외의 기능 컨트롤러
 * 도움말, 문의사항, 회원관리
 */
public class AdminController extends MultiActionController {

    // SLF4J Logging
    private Logger logger = LoggerFactory.getLogger(AdminController.class);

    /**
     * 미완료된 문의사항을 조회 한다.
     *
     * @param request HttpServletRequest
     * @param response HttpServletReponse
     * @return ModelAndView
     */
    public ModelAndView admin(HttpServletRequest request, HttpServletResponse response) {

        HttpSession session = request.getSession(false); // 세션을 반환받는다

        if(session == null){
            return new ModelAndView("index");
        }

        if((String)session.getAttribute("userId") == null){
            return new ModelAndView("index");
        }

        String adminLevel = "1";

        /**
         * member Level 이 1 인 관리자만 관리자 서비스를 사용할 수 있다.
         */
        if("1".equals((String)session.getAttribute("level"))){
            Contact contact = new Contact();

            String faq_type = request.getParameter("faq_type");         // 문의 형식    -> 조회 위함.
            String faq_idx = request.getParameter("faq_idx");           // 문의 형식 인덱스 -> 상태 유지 위함.
//        logger.info("faq_type                    : {}", faq_type);
//        logger.info("faq_idx                    : {}", faq_idx);
            if(faq_type==null){
                faq_type = "";
            }
            if(faq_type.equals("all")){
                faq_type = "";
            }
            contact.setCategory(faq_type);

            String id = request.getParameter("writer_id");
            String nick_name = request.getParameter("writer_nick_name");
            String content = request.getParameter("content");

            if(id == null){
                id = "";
            }

            if(nick_name == null){
                nick_name = "";
            }

            if(content == null){
                content = "";
            }

//            logger.info("admin");
//            logger.info("id                   : {}", id);
//            logger.info("nick_name            : {}", nick_name);
//            logger.info("content              : {}", content);


            contact.setWriter_id(id);
            contact.setWriter_nick_name(nick_name);
            contact.setContent(content);


            /**
             * 초기 페이지의 미완료된 문의사항을 조회하기 위해
             * 도메인에 필요한 정보 셋팅
             */
            contact.setActivate_yn("Y");
            contact.setComplete_yn("N");

            /**
             * DB에서 가져온다.
             */
            java.util.List contactList = dayveService.getContactList(contact);
            String totalContact = dayveService.getTotalContact(contact);

            /**
             * DB에서 잘가져왔는지 검사
             */

//            logger.info("admin");
//            logger.info("totalContact                    : {}", totalContact);
//            logger.info("contactList");
//            for(int i = 0; i < contactList.size(); i++){
//                Contact tempContact = new Contact();
//                tempContact = (Contact)contactList.get(i);
//                logger.info("contactListItem        : {}", tempContact.getContact_no());
//            }

            /**
             * 페이징 처리를 위한 부분
             */
            request.setAttribute("param", request);
            request.setAttribute("totalRow", totalContact);
            request.setAttribute("currentPage", (new StringBuilder()).append(contact.getCurrentPage()).append("").toString());
            request.setAttribute("pageSize", (new StringBuilder()).append(contact.getPageSize()).append("").toString());

            /**
             * mav에 담아 전달하기
             */

            ModelAndView mav = new ModelAndView();
            mav.setViewName("admin");
            mav.addObject("totalContact", totalContact);
            mav.addObject("contactList", contactList);
            mav.addObject("faq_type", faq_type);
            mav.addObject("faq_idx", faq_idx);
            return mav;

        }else{
            return new ModelAndView("index");
        }


    }

    /**
     * 완료된 문의사항을 조회 한다.
     *
     * @param request HttpServletRequest
     * @param response HttpServletReponse
     * @return ModelAndView
     */
    public ModelAndView adminComplete(HttpServletRequest request, HttpServletResponse response) throws Exception{

        HttpSession session = request.getSession(false); // 세션을 반환받는다

        if(session == null){
            return new ModelAndView("index");
        }

        if((String)session.getAttribute("userId") == null){
            return new ModelAndView("index");
        }

        String adminLevel = "1";

        /**
         * member Level 이 1 인 관리자만 관리자 서비스를 사용할 수 있다.
         */
        if("1".equals((String)session.getAttribute("level"))){

            Contact contact = new Contact();
            bind(request, contact);

            String faq_type = request.getParameter("faq_type");         // 문의 형식    -> 조회 위함.
            String faq_idx = request.getParameter("faq_idx");           // 문의 형식 인덱스 -> 상태 유지 위함.
//        logger.info("faq_type                    : {}", faq_type);
//        logger.info("faq_idx                    : {}", faq_idx);
            if(faq_type==null){
                faq_type = "";
            }
            if(faq_type.equals("all")){
                faq_type = "";
            }
            contact.setCategory(faq_type);

            String id = request.getParameter("writer_id");
            String nick_name = request.getParameter("writer_nick_name");
            String content = request.getParameter("content");


            if(id == null){
                id = "";
            }

            if(nick_name == null){
                nick_name = "";
            }

            if(content == null){
                content = "";
            }

//            logger.info("adminComplete");
//            logger.info("id                   : {}", id);
//            logger.info("nick_name            : {}", nick_name);
//            logger.info("content              : {}", content);

            contact.setWriter_id(id);
            contact.setWriter_nick_name(nick_name);
            contact.setContent(content);

            contact.setActivate_yn("Y");
            contact.setComplete_yn("Y");

            java.util.List contactList = dayveService.getContactList(contact);
            String totalContact = dayveService.getTotalContact(contact);

//        logger.info("adminComplete");
//        logger.info("totalContact                    : {}", totalContact);
//        logger.info("contactList");
//            for(int i = 0; i < contactList.size(); i++){
//                Contact tempContact = new Contact();
//                tempContact = (Contact)contactList.get(i);
//            logger.info("contactListItem        : {}", tempContact.getContact_no());
//            }

            /**
             * 페이징 처리를 위한 부분
             */
            request.setAttribute("param", request);
            request.setAttribute("totalRow", totalContact);
            request.setAttribute("currentPage", (new StringBuilder()).append(contact.getCurrentPage()).append("").toString());
            request.setAttribute("pageSize", (new StringBuilder()).append(contact.getPageSize()).append("").toString());

            ModelAndView mav = new ModelAndView();
            mav.setViewName("adminComplete");
            mav.addObject("totalContact", totalContact);
            mav.addObject("contactList", contactList);
            mav.addObject("faq_type", faq_type);
            mav.addObject("faq_idx", faq_idx);
            return mav;

        }else{
            return new ModelAndView("index");
        }

    }


    /**
     * 문의 사항의 세부내용을 확인하고 완료됐는지 미완료됐는지 처리를 한다.
     *
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ModelAndView adminContact(HttpServletRequest request, HttpServletResponse response)  throws Exception {

        HttpSession session = request.getSession(false); // 세션을 반환받는다

        if(session == null){
            return new ModelAndView("index");
        }

        if((String)session.getAttribute("userId") == null){
            return new ModelAndView("index");
        }

        String adminLevel = "1";

        /**
         * member Level 이 1 인 관리자만 관리자 서비스를 사용할 수 있다.
         */
        if("1".equals((String)session.getAttribute("level"))){


            Contact contact = new Contact();
            bind(request, contact);

            contact = dayveService.getContactByNo(request.getParameter("boardno"));

            /**
             * 미완료에서 온것인지 완료에서 온것인지 구분하기 위한 flag
             * 0 : 미완료, 1 : 완료
             */
            String flag = request.getParameter("flag");

            String tempContent = contact.getContent().replace("\r\n", "<br>"); // 게시물 부분을 임시 String 에 넣는다 줄바꿈 처리

            contact.setContent(tempContent);




//        logger.info("adminContact");
//        logger.info("flag request            : {}", request.getParameter("flag"));
//        logger.info("flag                    : {}", flag);

            ModelAndView mav = new ModelAndView();
            mav.setViewName("adminContact");
            mav.addObject("contact", contact);
            mav.addObject("flag", flag);
            return mav;

        }else{
            return new ModelAndView("index");
        }

    }

    /**
     * 문의 사항의 상태를 변경 한다.
     * 완료 <-> 미완료
     *
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ModelAndView contactChange(HttpServletRequest request, HttpServletResponse response)  throws Exception {

        HttpSession session = request.getSession(false); // 세션을 반환받는다

        if(session == null){
            return new ModelAndView("index");
        }

        if((String)session.getAttribute("userId") == null){
            return new ModelAndView("index");
        }

        String adminLevel = "1";

        /**
         * member Level 이 1 인 관리자만 관리자 서비스를 사용할 수 있다.
         */
        if("1".equals((String)session.getAttribute("level"))){
            Contact contact = new Contact();
            bind(request, contact);

//        logger.info("contactChange");
//        logger.info("contactComplete before         : {}", contact.getComplete_yn());


            if(contact.getComplete_yn().equals("Y")){
                contact.setComplete_yn("N");
            }else if(contact.getComplete_yn().equals("N")){
                contact.setComplete_yn("Y");
            }

//        logger.info("contactComplete after         : {}", contact.getComplete_yn());

            String contactUpdateResult = dayveService.updateContact(contact);

            ModelAndView mav = new ModelAndView();
            mav.setViewName(request.getParameter("nextTarget"));
            return mav;

        }else{
            return new ModelAndView("index");
        }

    }

    /**
     * 관리자 모드에서 이용자 리스트를 불러온다.
     *
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ModelAndView adminMemberList(HttpServletRequest request, HttpServletResponse response)  throws Exception {

        HttpSession session = request.getSession(false); // 세션을 반환받는다

        if(session == null){
            return new ModelAndView("index");
        }

        if((String)session.getAttribute("userId") == null){
            return new ModelAndView("index");
        }

        String adminLevel = "1";

        /**
         * member Level 이 1 인 관리자만 관리자 서비스를 사용할 수 있다.
         */
        if("1".equals((String)session.getAttribute("level"))){

            Member member = new Member();
            bind(request, member);

            member.setId(request.getParameter("id"));
            member.setNick_name(request.getParameter("nick_name"));
            member.setEmail(request.getParameter("email"));

            member.setActivate_yn("Y");

//        logger.info("adminMemberList");
//        logger.info("id         : {}", member.getId());
//        logger.info("nick_name         : {}",  member.getNick_name());
//        logger.info("email         : {}",  member.getEmail());


            java.util.List memberList = dayveService.getMemberListBySearchword(member);
            String totalMember = dayveService.getTotalMemberCountBySearchword(member);


            /**
             * 페이징 처리를 위한 부분
             */
            request.setAttribute("param", request);
            request.setAttribute("totalRow", totalMember);
            request.setAttribute("currentPage", (new StringBuilder()).append(member.getCurrentPage()).append("").toString());
            request.setAttribute("pageSize", (new StringBuilder()).append(member.getPageSize()).append("").toString());


            ModelAndView mav = new ModelAndView();
            mav.setViewName("adminMemberList");
            mav.addObject("memberList", memberList);
            mav.addObject("totalMember", totalMember);

            return mav;

        }else{
            return new ModelAndView("index");
        }
    }


    /**
     * 관리자 모드에서 이용자의 세부 내용을 보고 수정할 페이지
     *
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ModelAndView adminMemberUpdate(HttpServletRequest request, HttpServletResponse response)  throws Exception {


        Member member = new Member();
        bind(request, member);

//        logger.info("loginUserLevel");
//        logger.info("id        : {}", (String)session.getAttribute("userId"));
//        logger.info("level     : {}", (String)session.getAttribute("level"));

        HttpSession session = request.getSession(false); // 세션을 반환받는다

        if(session == null){
            return new ModelAndView("index");
        }

        if((String)session.getAttribute("userId") == null){
            return new ModelAndView("index");
        }

        String adminLevel = "1";

        /**
         * member Level 이 1 인 관리자만 관리자 서비스를 사용할 수 있다.
         */
        if("1".equals((String)session.getAttribute("level"))){
            member = dayveService.getMemberById(request.getParameter("id")); //세션의 userID 값을 받아와 해당 아이디의 도메인을 받아 다음 타겟 페이지로 넘겨준다

            java.util.List countryList = dayveService.getCountryList();
            String countryTotalCount = dayveService.getTotalCountCountry();


//            logger.info("adminMemberUpdate");
//            logger.info("id        : {}", member.getId());
//            logger.info("open_c    : {}", member.getOpen_country_yn());
//            logger.info("open_e    : {}", member.getOpen_email_yn());
//            logger.info("open_m    : {}", member.getOpen_mobile_phone_yn());
//            logger.info("open_n    : {}", member.getOpen_nick_name_yn());
//            logger.info("open_h    : {}", member.getOpen_home_page_yn());
//            logger.info("sex       : {}", member.getSex());


            ModelAndView mav = new ModelAndView();
            mav.setViewName("adminMemberUpdate");
            mav.addObject("member", member);
            mav.addObject("countryList", countryList);
            mav.addObject("countryTotalCount", countryTotalCount);

            return mav;

        }else{
            /**
             * member Level 이 1이 아닐경우 로그인 페이지로 되돌린다.
             */
            return new ModelAndView("index");
        }
    }


    /**
     * 관리자 모드에서 이용자의 세부 내용을 확인 혹은 수정 한 후 정보를 수정하는 Action 을 수행하는 기능
     *
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ModelAndView adminMemberUpdateAction(HttpServletRequest request, HttpServletResponse response)  throws Exception {

        HttpSession session = request.getSession(false); // 세션을 반환받는다

        if(session == null){
            return new ModelAndView("index");
        }

        if((String)session.getAttribute("userId") == null){
            return new ModelAndView("index");
        }

        String adminLevel = "1";

        /**
         * member Level 이 1 인 관리자만 관리자 서비스를 사용할 수 있다.
         */
        if("1".equals((String)session.getAttribute("level"))){
            Member member = new Member();
            bind(request, member);


//        logger.info("adminMemberUpdateAction");
//        logger.info("id         : {}", member.getId());
//        logger.info("nick_name         : {}",  member.getNick_name());
//        logger.info("email         : {}",  member.getEmail());

            String result = "";

            if(member.getOpen_email_yn() == null){
                member.setOpen_email_yn("N");
            }

            if(member.getOpen_mobile_phone_yn() == null){
                member.setOpen_mobile_phone_yn("N");
            }

            if(member.getOpen_country_yn() == null){
                member.setOpen_country_yn("N");
            }

            if(member.getOpen_home_page_yn() == null){
                member.setOpen_home_page_yn("N");
            }

            if(member.getOpen_nick_name_yn() == null){
                member.setOpen_nick_name_yn("N");
            }

//        logger.info("adminMemberUpdateAction");
//        logger.info("id          : {}", member.getId());
//        logger.info("open_c      : {}", member.getOpen_country_yn());
//        logger.info("open_e      : {}", member.getOpen_email_yn());
//        logger.info("open_m      : {}", member.getOpen_mobile_phone_yn());
//        logger.info("open_n      : {}", member.getOpen_nick_name_yn());
//        logger.info("open_h      : {}", member.getOpen_home_page_yn());
//        logger.info("sex         : {}", member.getSex());


            result = dayveService.adminUpdateMemberById(member); // 도메인에서 userid를 받아와 update action 을 수행하고 result 에 결과 저장
            // 새롭게 멤버 정보를 받아와 도메인에 주입한다. 세션 재 섫정 필요
            // member = dayveService.getMemberById(member.getId());

//        logger.info("updateResult: {}", result);



            ModelAndView mav = new ModelAndView();
            mav.setViewName("redirect:./adminMemberList.do?id&nick_name&email");
            return mav;

        }else{
            return new ModelAndView("index");
        }

    }

    /**
     * 카테고리 와 아이템 별로 사용 순위를 조회한다.
     *
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ModelAndView adminStatistic(HttpServletRequest request, HttpServletResponse response)  throws Exception {

        HttpSession session = request.getSession(false); // 세션을 반환받는다

        if(session == null){
            return new ModelAndView("index");
        }

        if((String)session.getAttribute("userId") == null){
            return new ModelAndView("index");
        }

        String adminLevel = "1";

        /**
         * member Level 이 1 인 관리자만 관리자 서비스를 사용할 수 있다.
         */
        if("1".equals((String)session.getAttribute("level"))){

            java.util.List categoryList = myPageService.getCategoryList();
            String categoryTotalCount = Integer.toString(categoryList.size());

            java.util.List itemList = myPageService.getItemList();
            String itemTotalCount = Integer.toString(itemList.size());




            /**
             * 카테고리 리스트를 검색하여 카테고리가 많이 등록된 별로 순위를 검출한 새 리스트를 만든다
             */

            Category category = new Category();

            java.util.List tempCategoryList = new ArrayList();

            int resultFlag = 2;

            CategoryRank categoryRank = new CategoryRank();
            CategoryRank categoryRank2 = new CategoryRank();

            for(int i = 0; i < categoryList.size(); i++){


                category = (Category)categoryList.get(i);


                if(i == 0){
                    /**
                     * 첫번째 카테고리 첫번째 카테고리는 임시 랭크도메인에 무조건 셋한다 (두번째와 비교를 위해)
                     */

                    categoryRank.setCategoryName(category.getName());
                    categoryRank.setAmount(1);

                    tempCategoryList.add(categoryRank);
                    resultFlag = 2;

                }else{ // 두번째 부터 비교 계산 시작

                    for(int j = 0; j < tempCategoryList.size(); j++){
                        /**
                         * 랭크 리스트를 돌면서 일치하는 이름이 있을 시, 해당 랭크도메인에 Amount 를 1 더하고 다시 해당 위치에 세트 한다.
                         * 일치하는 결과가 있었기 때문에 resultFlag 를 1로 하며 업데이트가 있었음을 표시한다.
                         */

                        categoryRank = (CategoryRank)tempCategoryList.get(j);



                        if(category.getName().equals(categoryRank.getCategoryName())){

                            int amount = categoryRank.getAmount();
                            amount++;
                            categoryRank.setAmount(amount);
                            categoryRank.setCategoryName(category.getName());

                            tempCategoryList.set(j, categoryRank);

                            resultFlag = 1;

                        }else{
                            resultFlag = 2;
                        }
                    }

                    if(resultFlag == 1){
                        /**
                         * 업데이트가 존재하였기 때문에 해당 카테고리는 resultFlag 를 초기화 시키고 다음 카테고리로 넘어간다.
                         */
                        resultFlag = 2;
                    }else{
                        /**
                         * 업데이트가 미존재하였기 때문에 랭크 리스트에 다음 index 에 해당 카테고리를 초기화하여 세트 한다.
                         */

                        CategoryRank tempCategoryRank = new CategoryRank();

                        tempCategoryRank.setCategoryName(category.getName());

                        tempCategoryRank.setAmount(1);
                        tempCategoryList.add(tempCategoryRank);

                    }

                }

            }


//        logger.info("tempCategoryList");


//        for(int k = 0; k < tempCategoryList.size(); k++){
//            categoryRank = (CategoryRank)tempCategoryList.get(k);
//            logger.info("name        : {}", categoryRank.getCategoryName());
//            logger.info("amount      : {}", categoryRank.getAmount());
//        }

            // 크기순 재정렬.
            for(int j = 0; j < tempCategoryList.size()-1; j++){
                for(int k = 0; k < tempCategoryList.size()-1; k++){
                    categoryRank = (CategoryRank)tempCategoryList.get(k);
                    categoryRank2 = (CategoryRank)tempCategoryList.get(k+1);
                    if(categoryRank.getAmount()<categoryRank2.getAmount()){
                        tempCategoryList.set(k, categoryRank2);
                        tempCategoryList.set(k+1, categoryRank);
                    }
                }
            }

            ///////////////////////////////////////////////////////////////////////////////////////////////////


            /**
             * 아이템 리스트를 검색하여 아이템이 많이 등록된 별로 순위를 검출한 새 리스트를 만든다
             */

            Item item = new Item();

            java.util.List tempItemList = new ArrayList();

            int itemResultFlag = 2;

            ItemRank itemRank = new ItemRank();
            ItemRank itemRank2 = new ItemRank();

            for(int o = 0; o < itemList.size(); o++){


                item = (Item)itemList.get(o);


                if(o == 0){
                    /**
                     * 첫번째 카테고리 첫번째 카테고리는 임시 랭크도메인에 무조건 셋한다 (두번째와 비교를 위해)
                     */

                    itemRank.setItemName(item.getName());
                    itemRank.setAmount(1);

                    tempItemList.add(itemRank);
                    itemResultFlag = 2;

                }else{ // 두번째 부터 비교 계산 시작

                    for(int p = 0; p < tempItemList.size(); p++){
                        /**
                         * 랭크 리스트를 돌면서 일치하는 이름이 있을 시, 해당 랭크도메인에 Amount 를 1 더하고 다시 해당 위치에 세트 한다.
                         * 일치하는 결과가 있었기 때문에 itemResultFlag 를 1로 하며 업데이트가 있었음을 표시한다.
                         */

                        itemRank = (ItemRank)tempItemList.get(p);



                        if(item.getName().equals(itemRank.getItemName())){

                            int amount = itemRank.getAmount();
                            amount++;
                            itemRank.setAmount(amount);
                            itemRank.setItemName(item.getName());

                            tempItemList.set(p, itemRank);

                            itemResultFlag = 1;

                        }else{
                            itemResultFlag = 2;
                        }
                    }

                    if(itemResultFlag == 1){
                        /**
                         * 업데이트가 존재하였기 때문에 해당 카테고리는 itemResultFlag 를 초기화 시키고 다음 카테고리로 넘어간다.
                         */
                        itemResultFlag = 2;
                    }else{
                        /**
                         * 업데이트가 미존재하였기 때문에 랭크 리스트에 다음 index 에 해당 카테고리를 초기화하여 세트 한다.
                         */

                        ItemRank tempItemRank = new ItemRank();

                        tempItemRank.setItemName(item.getName());

                        tempItemRank.setAmount(1);
                        tempItemList.add(tempItemRank);

                    }

                }

            }


//        logger.info("tempItemList");
            // 각각의 갯수 확인
//        for(int u = 0; u < tempItemList.size(); u++){
//            itemRank = (ItemRank)tempItemList.get(u);
//
//            logger.info("name        : {}", itemRank.getItemName());
//            logger.info("amount      : {}", itemRank.getAmount());

//        }
            // 크기순 재정렬.
            for(int j = 0; j < tempItemList.size()-1; j++){
                for(int k = 0; k < tempItemList.size()-1; k++){
                    itemRank = (ItemRank)tempItemList.get(k);
                    itemRank2 = (ItemRank)tempItemList.get(k+1);
                    if(itemRank.getAmount()<itemRank2.getAmount()){
                        tempItemList.set(k, itemRank2);
                        tempItemList.set(k+1, itemRank);
                    }
                }
            }

            ModelAndView mav = new ModelAndView();

            mav.setViewName("adminStatistic");

            mav.addObject("categoryRankList", tempCategoryList);
            mav.addObject("categoryRankTotalCount", tempCategoryList.size());

            mav.addObject("itemRankList", tempItemList);
            mav.addObject("itemRankTotalCount", tempItemList.size());

            return mav;

        }else{
            return new ModelAndView("index");
        }

    }

    /**
     * 해당 카테고리를 사용하는 사용자를 조회한다.
     *
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ModelAndView adminCategoryMemberList(HttpServletRequest request, HttpServletResponse response)  throws Exception {

        HttpSession session = request.getSession(false); // 세션을 반환받는다

        if(session == null){
            return new ModelAndView("index");
        }

        if((String)session.getAttribute("userId") == null){
            return new ModelAndView("index");
        }

        String adminLevel = "1";

        /**
         * member Level 이 1 인 관리자만 관리자 서비스를 사용할 수 있다.
         */
        if("1".equals((String)session.getAttribute("level"))){

            Member member = new Member();
            bind(request, member);

            Category category = new Category();

//            logger.info("categoryName : {}", request.getParameter("objectName"));

            category.setName(request.getParameter("objectName"));

            java.util.List memberList = dayveService.getCategoryMemberListByCategoryName(category);


            ModelAndView mav = new ModelAndView();
            mav.setViewName("adminCategoryMemberList");
            mav.addObject("memberList", memberList);
            mav.addObject("totalMember", memberList.size());
            mav.addObject("name", request.getParameter("objectName"));

            return mav;

        }else{
            return new ModelAndView("index");
        }
    }

    /**
     * 해당 아이템을 사용하는 사용자를 조회한다.
     *
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ModelAndView adminItemMemberList(HttpServletRequest request, HttpServletResponse response)  throws Exception {

        HttpSession session = request.getSession(false); // 세션을 반환받는다

        if(session == null){
            return new ModelAndView("index");
        }

        if((String)session.getAttribute("userId") == null){
            return new ModelAndView("index");
        }

        String adminLevel = "1";

        /**
         * member Level 이 1 인 관리자만 관리자 서비스를 사용할 수 있다.
         */
        if("1".equals((String)session.getAttribute("level"))){
            Member member = new Member();
            bind(request, member);

            Item item = new Item();

//            logger.info("itemName : {}", request.getParameter("objectName"));

            item.setName(request.getParameter("objectName"));

            java.util.List memberList = dayveService.getItemMemberListByItemName(item);

            ModelAndView mav = new ModelAndView();
            mav.setViewName("adminItemMemberList");
            mav.addObject("memberList", memberList);
            mav.addObject("totalMember", memberList.size());
            mav.addObject("name", request.getParameter("objectName"));

            return mav;
        }else{
            return new ModelAndView("index");
        }

    }






    ///////////////////////////////////////
    // Spring Framework Setter Injection //
    ///////////////////////////////////////

    private DayveService dayveService;
    private LocaleResolver localeResolver;
    private CommentService commentService;
    private CommunityBoardService communityBoardService;
    private PhotoBoardService photoBoardService;
    private NoticeBoardService noticeBoardService;
    private MyPageService myPageService;



    public void setLocaleResolver(LocaleResolver localeResolver) {
        this.localeResolver = localeResolver;
    }

    public void setCommentService(CommentService commentService) {
        this.commentService = commentService;
    }

    public void setDayveService(DayveService dayveService) {
        this.dayveService = dayveService;
    }

    public void setCommunityBoardService(CommunityBoardService communityBoardService) {
        this.communityBoardService = communityBoardService;
    }

    public void setPhotoBoardService(PhotoBoardService photoBoardService) {
        this.photoBoardService = photoBoardService;
    }

    public void setNoticeBoardService(NoticeBoardService noticeBoardService) {
        this.noticeBoardService = noticeBoardService;
    }

    public void setMyPageService(MyPageService myPageService) {
        this.myPageService = myPageService;
    }

    private String sessionInterval;
    private String passwordActivateInterval;

    public String getSessionInterval() {
        return sessionInterval;
    }

    public void setSessionInterval(String sessionInterval) {
        this.sessionInterval = sessionInterval;
    }

    public String getPasswordActivateInterval() {
        return passwordActivateInterval;
    }

    public void setPasswordActivateInterval(String passwordActivateInterval) {
        this.passwordActivateInterval = passwordActivateInterval;
    }

}
